Sesión 1: Inferencia causal en ciencias sociales

Técnicas de Evaluación de Impacto de Políticas Públicas en Crimen y Seguridad Ciudadana

Autores/as
Fecha de publicación

martes 26 de noviembre, 2024

Sigma Analytics Spa
Click al repositorio



Puede saber más de nosotros en: https://sigmaanalytics.cl/

¿Qué es la inferencia causal?

Podemos entender la inferencia causal como el interés por estimar el efecto de los acontencimientos y las decisiones sobre un resultado de interés determinado.

Algunos ejemplos:

Zubizarreta, J. R., Cerdá, M., & Rosenbaum, P. R. (2013). Effect of the 2010 Chilean earthquake on posttraumatic stress: reducing sensitivity to unmeasured bias through study design. Epidemiology, 24(1), 79-87.

Torche, F. (2011). The effect of maternal stress on birth outcomes: exploiting a natural experiment. Demography, 48, 1473-1491.

Muralidharan, K., Singh, A., & Ganimian, A. J. (2019). Disrupting education? Experimental evidence on technology-aided instruction in India. American Economic Review, 109(4), 1426-1460.

Fundamental

  • Datos: ¿Cuál es la estrategia de identificación?

  • Supuestos: ¿Cuáles son los supuestos que sustentan la causalidad en un estudio?

Sin embargo, tendremos algunos inconvenientes…

Problema fundamental de la inferencia causal

Considere una población de \(i\) unidades potencialmente expuestas a un tratamiento (causa) o control. La variable \(D_i\) nos indicará si la unidad \(i\) fue tratada (\(D_i=t\)) o no tratada, o sea control, (\(D_i=c\)).

Nos interesa evaluar el efecto sobre una variable de respuesta observada que denotaremos como \(Y_i\) con dos respuestas potenciales:

  • \(Y_i(t)\) si la unidad fue tratada
  • \(Y_i(c)\) en caso contrario

Dado que \(Y_i\) mide el efecto de la causa, entonces, los valores de \(Y_i\) son posteriores a la exposición del tratamiento.

A su vez, denotamos que el modelo causal del tratamiento en una unidad \(i\) puede ser expresado como:

\[\delta_i=Y_i(t)-Y_i(c)\]

Lo interesante del modelo Neyman-Rubin es que el valor de \(D_i\) para cada unidad \(i\) podría haber sido distinto. Este es el problema.

\[Y_i=D_iY_i(t)-(1-D_i)Y_i(c)\] Donde \(D_i=1\) si la persona fue tratada y \(D_i=0\) en caso contrario, entonces:

\[\delta_i=(1)Y_i(t)-(1-0)Y_i(c)=Y_i(t)-Y_i(c)\]

Problema fundamental de la inferencia causal

La imposibilidad de observar una variable de respuesta \(Y_i\) en la misma unidad y al mismo tiempo para dos condiciones diferentes: \(Y_i(t)\) y \(Y_i(c)\).

Graficamente:

Este es problema de missing data para los tratados solo conocemos \(Y_i(t)\) y para los controles solo conocemos \(Y_i(c)\).

¿Qué se puede hacer?

Average Treatment Effect (ATE)

Veamos los siguientes resultados potenciales:

\[\begin{split}ATE & = \frac{1}{10}\cdot(6-1+4-1+2 \\& \quad +9-9-1-4+1) \\ & = \frac{6}{10}=0.6\end{split}\]

Podemos usar la población \(U\) mediante un efecto causal promedio (ATE) como el valor esperado de la diferencia \(Y_i(t)-Y_i(c)\) en los \(i\)’s de \(U\):

  • Lo que está en naranjo no es observable, por lo que no es posible calcular el ATE directamente, entonces:

\[ \begin{align} ATE & = E[\delta_i] \nonumber \\ & = E[Y_i(t) - Y_i(t)] \nonumber \\ & = E[Y_i(t)] - E[Y_i(c)] \end{align} \] Adaptado de Broockman, D. E., Kalla, J. L., & Sekhon, J. S. (2017). The design of field experiments with survey outcomes: A framework for selecting more efficient, robust, and ethical designs. Political Analysis, 25(4), 435-464.

Supuestos

Si \(Y_{i}(D_i)\) es una variable de respuesta observada cuyo valor puede ser \(D_i=1\) para \(Y_{i}(t)\) o \(D_i=0\) para \(Y_{i}(c)\), entonces:

Independencia: la asignación al tratamiento es independiente de la variable resultado para tratados (\(Y_{i}(t)\)) y controles (\(Y_{i}(c)\)), y de cualquier otra variable en la población, formalmente queda expresado de la siguiente manera: \[(Y_{i}(t), Y_{i}(c)) \perp D_{i}\] En otras palabras:

  • \(E[Y_i(t)]=E[Y_i(t)|D_i=1]\)
  • \(E[Y_i(c)]=E[Y_i(c)|D_i=0]\)
  • \(ATE=E[Y_i(1)|D_i=1] - E[Y_i(0)|D_i=0]\)

Los términos son equivalentes e intercambiables:

  • Tratados: \(E[Y_i(1)|D_i=1] = E[Y_i(1)|D_i=0] = E[Y_i(1)]\)
  • Controles: \(E[Y_i(0)|D_i=0] = E[Y_i(0)|D_i=1] = E[Y_i(0)]\)

En consecuencia la asignación al grupo de tratamiento o control no incide sobre el valor esperado. Por lo tanto, la asignación aleatoria es condición de posibilidad de la independencia y se deduce que, en los promedios, la única diferencia entre \((D_{t}\) y \((D_{c}\) corresponde a que un grupo fue tratado y el otro no. En definitiva, se puede estimar el \(ATE\) como el efecto promedio del medicaid para el grupo tratamiento y en el grupo de control:

\[\frac{1}{N}\sum_{i=1}^{N} Y_{i}(t) - \frac{1}{N}\sum_{i=1}^{N} Y_{i}(c)\]

Restricción de exclusión: los resultados del experimento dependen únicamente de la exposición al tratamiento \((D_{i}=1)\) y no de la asignación entre grupo de tratamiento y control. En términos formales nos permite identificar el efecto causal. En definitiva se espera que todos los individuos asignados al tratamiento sean expuestos al estímulo, a su vez, los asignados al grupo de control no son expuestos al estímulo: \[Y_{i}(1,d) = Y_{i}(0,d)\]

Stable-unit-treatment assumption (SUTVA): no hay interferencia (spillovers) en la respuesta al tratamiento de un individuo en comparación a otro. En otras palabras, si la observación \(i\) se expone al tratamiento \(t\), el valor de la variable resultado \(Y\) se mantendrá igual sin importar el tipo de asignación ni el tipo de tratamiento que reciban las otras observaciones \(i\) (sería problemático que la asignación del seguro a un individuo afectara el resultado de salud en otro individuo). Esto nos garantiza de que solo existan dos respuestas ante la condición de tratamiento (asignación), independiente de las otras unidades. Por lo tanto, podemos estimar la causalidad como al diferencia en la variable resultado para el grupo de tratamiento y el grupo de control.

Adaptado de Broockman, D. E., Kalla, J. L., & Sekhon, J. S. (2017). The design of field experiments with survey outcomes: A framework for selecting more efficient, robust, and ethical designs. Political Analysis, 25(4), 435-464.

Algunos ejemplos:

  • Salud pública: efecto rebaño.

  • Educación: estudiantes pueden compartir su conocimiento con amigos.

  • Criminología: la presencia policial puede desplazar la criminalidad a otras áreas.

La idea del contrafactual

Pensemos dos escenarios, ¿podemos identificar el efecto?

  • Comparaciones antes-después: cotejan los resultados del mismo grupo antes y después de una intervención.

  • Comparaciones de participantes versus no participantes: comparan los resultados de un grupo que elige participar de la intervención versus otro grupo que elige no participar.

Correlación vs causalidad

En muchos estudios e investigaciones, es fácil observar una correlación entre dos variables, como la acción del hombre dentro del vehículo y el movimiento de este, pero eso no significa que una variable cause la otra. La causalidad implica un mecanismo claro que conecta las variables de manera que una provoque la otra, como las personas empujando el vehículo desde fuera.

La pregunta de fondo es ¿la correlación observada es causal?

Causalidad \(\neq\) Asociación:

\(E[Y_i(1)] - E[Y_i(0)] \neq E[Y_i(1) | D_i = 1] - E[Y_i(0) | D_i = 0]\)

Dos condiciones necesarias:

  1. \(E[Y_i(1)|D_i=1]=E[Y_i(1)|D_i=0]=E[Y_i(1)]\)
  2. \(E[Y_i(0)|D_i=0]=E[Y_i(0)|D_i=1]=E[Y_i(0)]\)

Si las condiciones 1 y 2 se cumplen entonces: Causalidad \(=\) Asociación:

Pensemos en algunas relaciones:

  • ¿El cinturón de seguridad (X) reduce mortalidad por accidentes (Y)?
  • ¿La contaminación industrial (X) aumenta la temperatura del planeta (Y)?
  • ¿Un mayor nivel educativo del padre (X) aumenta el nivel educativo del hijo?
  • ¿Venir a clases (X) mejora mi nota final (Y)?

El concepto clave para responder estas preguntas sobre causalidad es el de contrafactual o contrafáctico ¿Qué hubiese pasado en ausencia del tratamiento? El escenario ideal es poder comparar el resultado cuando ocurre y cuando no ocurre.

Aproximación al ATE vía regresión lineal

Aproximación clásica

Podemos obtener una aproximación directa a partir de datos:

Click para ver el código
# Librerías de trabajo
library(dplyr) # Manipulación 
library(tidyr) # Manipulación 
library(broom) # Para manipular objetos
library(Matrix)
library(AER) # Contiene los datos 
library(texreg) # Contiene los datos 

# Extraemos los datos 
data(STAR)
glimpse(STAR)
Rows: 11,598
Columns: 47
$ gender      <fct> female, female, female, male, male, male, male, female, ma…
$ ethnicity   <fct> afam, cauc, afam, cauc, afam, cauc, afam, cauc, cauc, cauc…
$ birth       <yearqtr> 1979 Q3, 1980 Q1, 1979 Q4, 1979 Q4, 1980 Q1, 1979 Q3, …
$ stark       <fct> NA, small, small, NA, regular+aide, NA, NA, NA, NA, NA, re…
$ star1       <fct> NA, small, small, NA, NA, NA, NA, regular+aide, regular, r…
$ star2       <fct> NA, small, regular+aide, NA, NA, regular, NA, regular+aide…
$ star3       <fct> regular, small, regular+aide, small, NA, regular, regular+…
$ readk       <int> NA, 447, 450, NA, 439, NA, NA, NA, NA, NA, 448, 447, 431, …
$ read1       <int> NA, 507, 579, NA, NA, NA, NA, 475, NA, 651, 651, 533, 558,…
$ read2       <int> NA, 568, 588, NA, NA, NA, NA, 573, NA, 596, 614, 608, 608,…
$ read3       <int> 580, 587, 644, 686, NA, 644, NA, 599, NA, 626, 641, 665, 5…
$ mathk       <int> NA, 473, 536, NA, 463, NA, NA, NA, NA, NA, 559, 489, 454, …
$ math1       <int> NA, 538, 592, NA, NA, NA, NA, 512, NA, 532, 584, 545, 553,…
$ math2       <int> NA, 579, 579, NA, NA, NA, NA, 550, NA, 590, 639, 603, 579,…
$ math3       <int> 564, 593, 639, 667, NA, 648, NA, 583, NA, 618, 684, 648, 5…
$ lunchk      <fct> NA, non-free, non-free, NA, free, NA, NA, NA, NA, NA, non-…
$ lunch1      <fct> NA, free, NA, NA, NA, NA, NA, non-free, non-free, non-free…
$ lunch2      <fct> NA, non-free, non-free, NA, NA, non-free, NA, non-free, no…
$ lunch3      <fct> free, free, non-free, non-free, NA, non-free, free, non-fr…
$ schoolk     <fct> NA, rural, suburban, NA, inner-city, NA, NA, NA, NA, NA, r…
$ school1     <fct> NA, rural, suburban, NA, NA, NA, NA, rural, rural, rural, …
$ school2     <fct> NA, rural, suburban, NA, NA, rural, NA, rural, rural, rura…
$ school3     <fct> suburban, rural, suburban, rural, NA, rural, inner-city, r…
$ degreek     <fct> NA, bachelor, bachelor, NA, bachelor, NA, NA, NA, NA, NA, …
$ degree1     <fct> NA, bachelor, master, NA, NA, NA, NA, master, master, bach…
$ degree2     <fct> NA, bachelor, bachelor, NA, NA, bachelor, NA, master, bach…
$ degree3     <fct> bachelor, bachelor, bachelor, bachelor, NA, bachelor, bach…
$ ladderk     <fct> NA, level1, level1, NA, probation, NA, NA, NA, NA, NA, lev…
$ ladder1     <fct> NA, level1, probation, NA, NA, NA, NA, apprentice, level1,…
$ ladder2     <fct> NA, apprentice, level1, NA, NA, notladder, NA, level1, lev…
$ ladder3     <fct> level1, apprentice, level1, level1, NA, level1, notladder,…
$ experiencek <int> NA, 7, 21, NA, 0, NA, NA, NA, NA, NA, 16, 5, 8, 17, NA, NA…
$ experience1 <int> NA, 7, 32, NA, NA, NA, NA, 8, 13, 7, 11, 15, 0, 5, NA, 17,…
$ experience2 <int> NA, 3, 4, NA, NA, 13, NA, 13, 6, 8, 31, 14, 9, NA, 4, 28, …
$ experience3 <int> 30, 1, 4, 10, NA, 15, 17, 23, 8, 8, 7, 14, 8, NA, 19, 13, …
$ tethnicityk <fct> NA, cauc, cauc, NA, cauc, NA, NA, NA, NA, NA, cauc, cauc, …
$ tethnicity1 <fct> NA, cauc, afam, NA, NA, NA, NA, cauc, cauc, cauc, cauc, ca…
$ tethnicity2 <fct> NA, cauc, afam, NA, NA, cauc, NA, afam, cauc, cauc, cauc, …
$ tethnicity3 <fct> cauc, cauc, cauc, cauc, NA, cauc, afam, cauc, cauc, cauc, …
$ systemk     <fct> NA, 30, 11, NA, 11, NA, NA, NA, NA, NA, 35, 41, 4, 11, NA,…
$ system1     <fct> NA, 30, 11, NA, NA, NA, NA, 4, 40, 21, 35, 41, 4, 11, NA, …
$ system2     <fct> NA, 30, 11, NA, NA, 6, NA, 4, 40, 21, 35, 41, 4, NA, 17, 2…
$ system3     <fct> 22, 30, 11, 6, NA, 6, 11, 4, 40, 21, 35, 41, 4, NA, 17, 20…
$ schoolidk   <fct> NA, 63, 20, NA, 19, NA, NA, NA, NA, NA, 69, 79, 5, 16, NA,…
$ schoolid1   <fct> NA, 63, 20, NA, NA, NA, NA, 5, 77, 50, 69, 79, 5, 16, NA, …
$ schoolid2   <fct> NA, 63, 20, NA, NA, 8, NA, 5, 77, 50, 69, 79, 5, NA, 41, 4…
$ schoolid3   <fct> 54, 63, 20, 8, NA, 8, 31, 5, 77, 50, 69, 79, 5, NA, 41, 48…

El conjunto de datos del Project STAR (Student/Teacher Achievement Ratio) proviene de un estudio longitudinal de cuatro años financiado por la Asamblea General de Tennessee y llevado a cabo a fines de la década de 1980 por el Departamento de Educación del Estado. Este estudio incluyó a más de 5,000 estudiantes de 79 escuelas, asignados aleatoriamente a una de tres intervenciones: clases pequeñas (13 a 17 estudiantes por maestro), clases regulares (22 a 25 estudiantes por maestro), y clases regulares con asistente (22 a 25 estudiantes con un asistente de maestro a tiempo completo). Los docentes también fueron asignados aleatoriamente a los grupos que enseñarían. Las intervenciones comenzaron cuando los estudiantes ingresaron al jardín de infancia y continuaron hasta el tercer grado. Stock y Watson (2007) obtuvieron este conjunto de datos del sitio web del Project STAR.

Vamos a trabajar con una versión sencilla de estos datos:

Click para ver el código
# Procesamos los datos
STAR <- STAR %>% 
  tidyr::drop_na(readk, mathk) %>% 
  mutate(str=if_else(stark=="small", 1, 0)) %>% 
  rowwise() %>% 
  mutate(tscorek=(readk + mathk)) %>% 
  select(str, tscorek, readk, mathk)

# Veamos los datos
glimpse(STAR)
Rows: 5,786
Columns: 4
Rowwise: 
$ str     <dbl> 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0,…
$ tscorek <int> 920, 986, 902, 1007, 936, 885, 818, 951, 917, 983, 903, 905, 1…
$ readk   <int> 447, 450, 439, 448, 447, 431, 395, 451, 478, 455, 430, 437, 47…
$ mathk   <int> 473, 536, 463, 559, 489, 454, 423, 500, 439, 528, 473, 468, 55…

Si consideramos la definición:

\[ \begin{align} ATE & = E[\delta_i] \nonumber \\ & = E[Y_i(t) - Y_i(t)] \nonumber \\ & = E[Y_i(t)] - E[Y_i(c)] \end{align} \] Podemos programar esto:

Click para ver el código
# Definimos la función 
estimador_ATE <- function(data, tratamiento, variable_resultado) {
  # Calcular la media del resultado para el grupo tratado
  Yt <- mean(data[[variable_resultado]][data[[tratamiento]] == 1], na.rm = TRUE)
  
  # Calcular la media del resultado para el grupo de control
  Yc <- mean(data[[variable_resultado]][data[[tratamiento]] == 0], na.rm = TRUE)
  
  # Calcular el ATE
  ATE <- Yt - Yc
  
  # Devolver el ATE
  return(ATE)
}
Click para ver el código
# Aplicamos los datos
estimador_ATE(STAR, tratamiento = "str", variable_resultado = "tscorek")
[1] 13.74055
Click para ver el código
estimador_ATE(STAR, tratamiento = "str", variable_resultado = "readk")
[1] 5.463098
Click para ver el código
estimador_ATE(STAR, tratamiento = "str", variable_resultado = "mathk")
[1] 8.277455

Una alternativa a esto:

Click para ver el código
STAR %>%
  t.test(tscorek ~ str, data = .) %>%
  tidy()
# A tibble: 1 × 10
  estimate estimate1 estimate2 statistic  p.value parameter conf.low conf.high
     <dbl>     <dbl>     <dbl>     <dbl>    <dbl>     <dbl>    <dbl>     <dbl>
1    -13.7      918.      932.     -6.38 2.07e-10     3129.    -18.0     -9.52
# ℹ 2 more variables: method <chr>, alternative <chr>

Aproximación vía regresión

Podemos aproximarnos al ATE mediante un modelo de regresión lineal:

\[ \begin{align} Y_i & = Y_i(0)(1 - d_i) + Y_i(1)d_i \\ & = Y_i(0) + (Y_i(1) - Y_i(0))d_i \\ & = \mu_{Y(0)} + [\mu_{Y(1)} - \mu_{Y(0)}]d_i + Y_i(0) - \mu_{Y(0)} + [(\mu_{Y(1)} - \mu_{Y(0)}) - (Y_i(0) - \mu_{Y(0)})]d_i \\ & = \alpha + \beta d_i + u_i \end{align} \]

Donde:

  • \((\alpha)\) es el intercepto y es igual a \((\mu_{Y(0)})\).
  • \((\beta)\) es \((\mu_{Y(1)} - \mu_{Y(0)})\), es decir, ATE.
  • \((u_i = Y_i(0) - \mu_{Y(0)}) si (d_i = 0)\) o \((u_i = Y_i(1) - \mu_{Y(1)})\) si \((d_i = 1)\).

Por ejemplo:

Click para ver el código
# Definimos y estimamos el modelo 
modelo1 <- lm(tscorek ~ str, data = STAR)
modelo2 <- lm(readk ~ str, data = STAR)
modelo3 <- lm(mathk ~ str, data = STAR)

# Reportamos estos modelos
htmlreg(l=list(modelo1, modelo2, modelo3))
Statistical models
  Model 1 Model 2 Model 3
(Intercept) 918.20*** 435.09*** 483.11***
  (1.15) (0.50) (0.75)
str 13.74*** 5.46*** 8.28***
  (2.11) (0.91) (1.36)
R2 0.01 0.01 0.01
Adj. R2 0.01 0.01 0.01
Num. obs. 5786 5786 5786
***p < 0.001; **p < 0.01; *p < 0.05

¿Cómo interpretamos estos modelos? ¿Qué limitaciones pueden presentar?